<?php
/**
 * Autor:   Miguel A. Zilli
 * Email:   miguelzilli@gmail.com
 */

class ProductoresController extends AppController{
    var $name = 'Productores';
    var $uses = array('Productor','Predio','Tenenciatipo','Provincia','Departamento',
        'Localidad','Acoentidad','Acoproduccion','ProductoresProveedor','Cuenta',
        'Producto','Agroquimicoxproduccion');
    var $helpers=array('DatePicker','Ajax','Javascript','Time','Paginator','Number');
    var $components=array('Wizard','RequestHandler');
    var $paginate = array(
            'limit' => 20,
            'order' => array(
                'Productor.apellido_prod' => 'ASC',
                'Productor.nombre_prod'=> 'ASC',
                'Productor.cuit_prod'=>'ASC'
        )
    );

    function ver($id=null){
        $productor=$this->Productor->find('first',array('conditions'=>'Productor.id='.$id));
        $productor+=$this->Departamento->find('first',array('conditions'=>'Departamento.id='.$productor['Localidad']['departamento_id']));
        $this->set('productor',$productor);
        $this->set('predios', $this->Predio->find('all',array(
                    'conditions'=>'Predio.productor_id='.$id
                )));
        $this->set('cuentas',$this->Cuenta->find('all',array(
                    'conditions'=>array('Cuenta.productor_id'=>$id)
                )));
        $this->set('productoresproveedores', $this->ProductoresProveedor->find('all',array(
                    'conditions'=>'ProductoresProveedor.productor_id='.$id,
                    'order'=>array(
                        'ProductoresProveedor.campania_prov'=>'DESC',
                        'ProductoresProveedor.val_prov'=>'ASC',
                        'Proveedor.nombre_prov'=>'ASC'
                    )
                )));
        $this->set('acoproducciones', $this->Acoproduccion->find('all',array(
                    'conditions'=>'Acoproduccion.productor_id='.$id,
                    'order'=>array(
                        'Acoproduccion.campania_prod'=>'DESC',
                        'Producto.nombre_prod'=>'ASC',
                        'Producto.variedad_prod'=>'ASC'
                    )
                )));
        $this->set('campanias',$this->Acoproduccion->find('all',array(
                    'fields'=>'Acoproduccion.campania_prod',
                    'conditions'=>'Acoproduccion.productor_id='.$id,
                    'order'=>'Acoproduccion.campania_prod DESC',
                    'group'=>'Acoproduccion.campania_prod',
                    'recursive'=>'-1',
                )));
    }

    function verdetalles($id=null){
        $productor=$this->Productor->find('first',array('conditions'=>'Productor.id='.$id));
        $productor+=$this->Departamento->find('first',array('conditions'=>'Departamento.id='.$productor['Localidad']['departamento_id']));
        $this->set('productor',$productor);
    }

    function buscar(){
        Configure::write('debug','0');
        if(!$this->RequestHandler->isAjax()){
            $this->set('llamada_ajax', 0);
            $this->Session->del('Busqueda');
            $buscar_por='cuit';
            $filtrarxactividad='si';
        }
        $condiciones = '';
        $filtro = '';
        if (isset($this->data['Busqueda']['filtro'])){
            $filtro = trim($this->data['Busqueda']['filtro']);
            $buscar_por = $this->data['Busqueda']['buscar_por'];
            $filtrarxactividad = $this->data['Busqueda']['filtrarxactividad'];
            //        }elseif (!empty($this->data['Busqueda']['filtro']) &&
            //            $this->data['Busqueda']['filtro'] == ''){
            //            $this->Session->del('Busqueda.filtro');
        }elseif ($this->Session->check('Busqueda.filtro')) {
            $filtro = $this->Session->read('Busqueda.filtro');
            $buscar_por = $this->Session->read('Busqueda.buscar_por');
            $filtrarxactividad = $this->Session->read('Busqueda.filtrarxactividad');
        }
        if ($filtrarxactividad == 'si'){
            $ids_productores=$this->Productor->ActividadtiposProductor->find('list',array(
                    'fields'=>'ActividadtiposProductor.productor_id',
                    'conditions'=>array('ActividadtiposProductor.actividadtipo_id'=>$this->ID_AGRICOLA),
                    'group'=>'ActividadtiposProductor.productor_id'
                ));
            $condiciones['Productor.id']=$ids_productores;
            if($this->Session->read('Usuario.tipo')=='ADMIN'){
                $condiciones['NOT']=array('Productor.acoentidad_id'=>'NULL');
            }else{
                $condiciones['Productor.acoentidad_id']=$this->Session->read('Usuario.acoentidad_id');
            }
        }
        if (isset($filtro)){
            switch ($buscar_por) {
                case 'cuit':
                    $condiciones['OR']=array(
                        'Productor.nro_doc_prod LIKE'=>"%$filtro%",
                        'Productor.cuit_prod LIKE'=>"%$filtro%"
                    );
                    break;

                case 'apellido':
                    $condiciones['Productor.apellido_prod LIKE']="%$filtro%";
                    break;

                case 'localidad':
                    $condiciones['OR']=array(
                        'Localidad.nombre_loc LIKE'=>"%$filtro%",
                        'Productor.col_paraje_prod LIKE'=>"%$filtro%"
                    );
                    break;

                default:
                    $condiciones['1']='1';
                    break;
            }
            $this->Session->write('Busqueda.filtro', $filtro);
        }
        $this->Session->write('Busqueda.buscar_por', $buscar_por);
        $this->Session->write('Busqueda.filtrarxactividad', $filtrarxactividad);
        $this->set('productores', $this->paginate('Productor', $condiciones));
        $this->set('radio_op',array('cuit'=>'DNI/CUIT','apellido'=>'Apellido','localidad'=>'Localidad/Colonia'));
        $this->set('radio_atr',array('value'=>$buscar_por,'legend'=>false));
        $this->set('filtrarxactividad_op',array('si'=>'Solo esta entidad','no'=>'Mostar todos'));
        $this->set('filtrarxactividad_atr',array('value'=>$filtrarxactividad,'legend'=>false));
        if($this->RequestHandler->isAjax()){
            $this->set('llamada_ajax', 1);
            $this->render('/elements/update_busqueda', 'ajax');
        }
    }

/*
 * --> wizard agregar productor y primer campo
 */
    function beforeFilter(){
        parent::beforeFilter();
        $this->Wizard->steps = array('productor', 'campo', 'produccion');
    }

    function wizard($step = null){
        $this->Wizard->process($step);
    }

    /*
     * [Wizard Process Callbacks]
     * _prepareStepName opcional; _processStepName obligatorio
     */
    function _prepareProductor(){
        $this->set('docTipos',array('DNI'=>'DNI','LC'=>'LC','LE'=>'LE'));
        $this->set('estadoCivil',array('CASADO/A'=>'CASADO/A','DIVORCIADO/A'=>'DIVORCIADO/A','SOLTERO/A'=>'SOLTERO/A','VIUDO/A'=>'VIUDO/A'));
        $this->set('provincias', $this->Provincia->find('list'));
        if(!empty($this->data['Departamento']['provincia_id'])){
            $this->set('departamentos',$this->Departamento->find('list',array(
                    'conditions'=>'Departamento.provincia_id='.$this->data['Departamento']['provincia_id'])));
        }
        if(!empty($this->data['Localidad']['departamento_id'])){
            $this->set('localidades', $this->Localidad->find('list',array(
                    'conditions'=>'Localidad.departamento_id='.$this->data['Localidad']['departamento_id'])));
        }
        $this->set('ivacondiciones', $this->Productor->Ivacondicion->find('list'));
    }

    function _processProductor(){
        $this->Productor->set($this->data);
        if ($this->Productor->validates()){
            return true;
        }
        $this->validationErrors=$this->Productor->invalidFields();
        return false;
    }

    function _prepareCampo(){
        if (empty($this->data)){
            $this->data=$this->Predio->porDefecto;
        }
        $this->set('provincias', $this->Provincia->find('list'));
        if(!empty($this->data['Departamento']['provincia_id'])){
            $this->set('departamentos',$this->Departamento->find('list',array(
                    'conditions'=>'Departamento.provincia_id='.$this->data['Departamento']['provincia_id'])));
        }
        if(!empty($this->data['Localidad']['departamento_id'])){
            $this->set('localidades', $this->Localidad->find('list',array(
                    'conditions'=>'Localidad.departamento_id='.$this->data['Localidad']['departamento_id'])));
        }
        $this->set('tenenciatipos',$this->Predio->Tenenciatipo->find('list'));
        for($m=24; $m<29; $m++){
            $gradosLatitud[$m]=$m;
        }
        for($m=58; $m<64; $m++){
            $gradosLongitud[$m]=$m;
        }
        for($m=0; $m<60; $m++){
            $minutos[$m]=$m;
        }
        $this->set('gradosLatitud',$gradosLatitud);
        $this->set('gradosLongitud',$gradosLongitud);
        $this->set('minutos',$minutos);
    }

    function _processCampo(){
        $this->Predio->set($this->data);
        if ($this->Predio->validates()){
            return true;
        }
        return false;
    }

    function _prepareProduccion(){
        $this->set('productos',$this->Producto->find('superlist',array(
                    'fields'=>array('Producto.id','Producto.nombre_prod','Producto.variedad_prod'),
                    'order'=>array('Producto.nombre_prod'=>'ASC','Producto.variedad_prod'=>'ASC'),
                    'conditions'=>array('Producto.actividadtipo_id'=>$this->ID_AGRICOLA)
                )));
        $this->set('campanias',$this->CAMPANIAS);
        $this->Session->write('cont',0);
    }

    function _processProduccion(){
        $this->Acoproduccion->set($this->data);
        if ($this->Acoproduccion->validates()){
            return true;
        }
        return false;
    }

    /*
     * [Wizard Completion Callback]
     */
    function _afterComplete() {
        $wizardData = $this->Wizard->read();
        extract($wizardData);

        //guardo datos del productor
        $productor['Actividadtipo']['actividadtipo_id']=$this->ID_AGRICOLA;
        $productor['Productor']['acoentidad_id']=$this->Session->read('Usuario.acoentidad_id');
        if ($this->Productor->save($productor)){
            $id_productor = $this->Productor->getID();
            $this->Wizard->completeUrl = '/productores/ver/'.$id_productor;

            //guardo datos del primer campo
            $campo['Predio']['productor_id'] = $id_productor;
            $this->Predio->save($campo['Predio']);
            $id_predio = $this->Predio->getID();

            //guardo datos de la primera produccion
                $produccion['Acoproduccion']['productor_id']=$id_productor;
                $produccion['Acoproduccion']['predio_id']=$id_predio;
                if ($this->Acoproduccion->save($produccion['Acoproduccion'])){
                    $id_produccion=$this->Acoproduccion->getID();
                    $id_algodon=$this->Producto->field('Producto.id',array('Producto.nombre_prod LIKE'=>'ALGODON'));
                    //guardar agroquimicos si la produccion NO es de algodon
                    if (($this->data['Acoproduccion']['producto_id']!=$id_algodon)&&
                        (!empty($produccion['Agroquimicoxproduccion']))){
                        foreach($produccion['Agroquimicoxproduccion'] as $key=>$datos){
                            $produccion['Agroquimicoxproduccion'][$key]['acoproduccion_id']=$id_produccion;
                            $this->Agroquimicoxproduccion->create($produccion['Agroquimicoxproduccion'][$key]);
                            if ($this->Agroquimicoxproduccion->validates()){
                                $this->Agroquimicoxproduccion->save($produccion['Agroquimicoxproduccion'][$key]);
                            }
                        }
                    }
                    $this->Session->setFlash('Operacion realizada correctamente.');
                    $this->redirect('/productores/ver/'.$id_productor);
                }else{
                    $this->Session->setFlash('Error: No se pudo realizar la operacion.');
                }
            $this->Session->setFlash('Operacion realizada correctamente.');
        }else{
            $this->Session->setFlash('Error: No se pudo realizar la operacion.');
        }
    }
/*
 * <-- fin wizard agregar productor y primer campo
 */

    function agregar(){
        if(!empty($this->data)){
            $this->data['Actividadtipo']['actividadtipo_id']=$this->ID_AGRICOLA;
            $this->data['Productor']['acoentidad_id']=$this->Session->read('Usuario.acoentidad_id');
            if($this->Productor->save($this->data)){
                $id_productor=$this->Productor->getID();
                $this->Session->setFlash('Operacion realizada correctamente.');
                $this->redirect('/productores/ver/'.$id_productor);
            }else{
                $this->Session->setFlash('Error: No se pudo realizar la operacion.');
            }
        }
        $this->set('docTipos',array('DNI'=>'DNI','LC'=>'LC','LE'=>'LE'));
        $this->set('estadoCivil',array('CASADO/A'=>'CASADO/A','DIVORCIADO/A'=>'DIVORCIADO/A','SOLTERO/A'=>'SOLTERO/A','VIUDO/A'=>'VIUDO/A'));
        $this->set('provincias', $this->Provincia->find('list'));
        if(!empty($this->data['Departamento']['provincia_id'])){
            $this->set('departamentos',$this->Departamento->find('list',array(
                    'conditions'=>'Departamento.provincia_id='.$this->data['Departamento']['provincia_id'])));
        }
        if(!empty($this->data['Localidad']['departamento_id'])){
            $this->set('localidades', $this->Localidad->find('list',array(
                    'conditions'=>'Localidad.departamento_id='.$this->data['Localidad']['departamento_id'])));
        }
        $this->set('ivacondiciones', $this->Productor->Ivacondicion->find('list'));
    }

    function editar($id){
        $this->__checkPermisos($id);
        if(!empty($this->data)){
            if ($this->Productor->save($this->data)){
                $this->Session->setFlash('Operacion realizada correctamente.');
                $this->redirect('/productores/ver/'.$id);
            }else{
                $this->Session->setFlash('Error: No se pudo realizar la operacion.');
            }
        }
        if(empty($this->data)){
            $this->data=$this->Productor->read(null,$id);
            $this->data+=$this->Departamento->find('first',array(
                'conditions'=>'Departamento.id='.$this->data['Localidad']['departamento_id']));
        }
        $this->set('provincias', $this->Provincia->find('list'));
        if(!empty($this->data['Departamento']['provincia_id'])){
            $this->set('departamentos',$this->Departamento->find('list',array(
                    'conditions'=>'Departamento.provincia_id='.$this->data['Departamento']['provincia_id'])));
        }
        if(!empty($this->data['Localidad']['departamento_id'])){
            $this->set('localidades', $this->Localidad->find('list',array(
                    'conditions'=>'Localidad.departamento_id='.$this->data['Localidad']['departamento_id'])));
        }
        $this->set('docTipos',array('DNI'=>'DNI','LC'=>'LC','LE'=>'LE'));
        $this->set('estadoCivil',array('CASADO/A'=>'CASADO/A','DIVORCIADO/A'=>'DIVORCIADO/A','SOLTERO/A'=>'SOLTERO/A','VIUDO/A'=>'VIUDO/A'));
        $this->set('ivacondiciones', $this->Productor->Ivacondicion->find('list', array('fields' => 'desc_iva')));
    }

    function editar_entidad($id){
        $this->__checkAdmin();
        if(!empty($this->data)){
            $this->Productor->id=$id;
            if ($this->Productor->saveField('acoentidad_id',$this->data['Productor']['acoentidad_id'])){
                $this->Session->setFlash('Operacion realizada correctamente.');
                $this->redirect('/productores/ver/'.$id);
            }else{
                $this->Session->setFlash('Error: No se pudo realizar la operacion.');
            }
        }
        if(empty($this->data)){
            $this->data=$this->Productor->read(null,$id);
            $this->data+=$this->Departamento->find('first',array(
                'conditions'=>'Departamento.id='.$this->data['Localidad']['departamento_id']));
        }
        $this->set('acoentidades', $this->Acoentidad->find('list'));
    }

    function eliminar($id=null){
        $this->__checkAdmin();
        $this->Productor->ActividadtiposProductor->deleteAll(array(
                'ActividadtiposProductor.productor_id'=>$id,
                'ActividadtiposProductor.actividadtipo_id'=>$this->ID_AGRICOLA)
        );
        $cont=$this->Productor->ActividadtiposProductor->find('count',array(
                'conditions'=>array('ActividadtiposProductor.productor_id'=>$id)
            ));
        if ($cont==0){
            if($this->Productor->del($id)){
                $this->Session->setFlash('Datos eliminados correctamente.');
                $this->redirect('/productores/buscar');
            }else{
                $this->Session->setFlash('Error: No se pudo realizar la operacion.');
                $ActividadtiposProductor=array(
                    'ActividadtiposProductor'=>array(
                        'productor_id'=>$id,
                        'actividadtipo_id'=>$this->ID_AGRICOLA
                    ));
                $this->Productor->ActividadtiposProductor->save($ActividadtiposProductor);
                $this->redirect('/productores/ver/'.$id);
            }
        }
    }

    function update_dpto(){
        if (!empty($this->data['Departamento']['provincia_id'])){
            $id_prov = $this->data['Departamento']['provincia_id'];
            $departamentos = $this->Departamento->find('list', array('fields'=>array('nombre_dpto'),'order'=>'nombre_dpto ASC','conditions'=>array('Departamento.provincia_id'=>$id_prov)));
        }else{
            $departamentos = null;
        }
        $this->set('options', $departamentos);
        $this->render('/elements/update_select', 'ajax');
    }

    function update_loc(){
        if (!empty($this->data['Localidad']['departamento_id'])){
            $id_dpto = $this->data['Localidad']['departamento_id'];
            $localidades = $this->Localidad->find('list', array('fields'=>array('nombre_loc'),'order'=>'nombre_loc ASC','conditions'=>array('Localidad.departamento_id'=>$id_dpto)));
        }else{
            $localidades = null;
        }
        $this->set('options', $localidades);
        $this->render('/elements/update_select', 'ajax');
    }
}
?>